# -*- coding: UTF-8 -*-
# cython: language_level=3
import grequests
import multiprocessing
import time
from fake_useragent import UserAgent
from lxml import etree
from selenium import webdriver

from db.mongodb import MongoDB
from utils.log import log

db = MongoDB()
ua = UserAgent(browsers=["chrome", "edge"], os=["windows"])
pass_urls = ['.baidu.com', '.taobao.com', '.tmall.com', '.alibaba.com', '.qq.com', '.1688.com', '.12580.tv', '.56.com','.pptv.com',
             '.yonzan.com', ',douban.com', '.bilibili.com', '.zhihu.com', '.sohu.com', '.douban.com', '.iqiyi.com',
             '.youku.com', '.sogou.com','sina.com','weibo.com','.ifeng.com','.kuwo.cn','.cctv.com','.1905.com'
             '.ailyun.com', '.alimama.com', '.360kan.com',  '.meituan.com']

opt = webdriver.ChromeOptions()
opt.add_argument('headless')


def grequests_baidu_list(hrefs):
    try:
        rs = (grequests.head(u, timeout=(3.1, 6.1)) for u in hrefs)
        responses = grequests.map(rs)
        # print(responses)
        for response in responses:
            # for href in hrefs:
            try:
                # response = requests.head(href)
                url = response.url
                # 首次求速度加的判断
                for pass_url in pass_urls:
                    if pass_url in url:
                        raise Exception('跳过常见网站')
            except Exception as e:
                log.debug(e)
                continue
            if db.add('INPUT_URLS', {"url": url}):
                print(url)

    except:
        pass


def add_baidu_search(keyword):
    print(keyword)
    driver = webdriver.Chrome(options=opt)
    for num in range(0, 100000, 50):
        url = f"https://www.baidu.com/s?pn={num}&rn=50&&wd={keyword}"

        driver.get(url)
        html = etree.HTML(driver.page_source)
        hrefs = html.xpath('//h3[@class="t"]//a/@href')
        grequests_baidu_list(hrefs)
        print(keyword, 'page ', num)

        if not html.xpath("//a[text()='下一页>']"):
            print(''' 


                        ----------------没有下一页了----------------


                        ''')
            break
        time.sleep(1)
    driver.close()


def baidu_main():
    p = multiprocessing.Pool()

    city_keywords = [ '','粤icp', '广州','羊城', '越秀区', '荔湾区', '海珠区', '天河区', '白云区', '黄埔区', '番禺区', '花都区', '南沙区', '增城区',
                     '从化区']#
    # releative_keywords = ['动漫', '动画', '教学视频，视频，电影天堂，电视剧，纪录片', '短视频', '微视频', '微电影', '教育视频', '新闻视频', '音乐视频', '舞蹈视频',
    #                       '竞技视频', '比赛视频', '体育视频', '娱乐视频', '在线播放', '在线观看，正在播放']
    releative_keywords = [#'视频', '电影', '电视剧', '综艺', '纪录片', '动画', '动漫', '国漫', '日漫',
                         # '流行首播', '热播', '在线播放', '在线观看', '正在播放',
                         # '大陆', '港台', '欧美', '日韩', '美剧', '韩剧', '华语', '热舞', '嘻哈', '摇滚',

                          '1024', '4480yy', '6080', '91', '99', 'AV', 'Av', 'HEZYO', 'aV', 'ag777', 'av', 'bbin', 'porm', 'pron', '一本道',
          '一道', '丁香', '下马', '不卡', '不要', '东京', '丝瓜', '丝袜', '久久', '久草', '乱伦', '五月天', '人人爱', '人妇', '人妻', '人成', '伊人', '作爱',
          '做受', '做爱', '偷偷', '偷拍', '偷窥', '兽兽', '凌辱', '加勒比', '口交', '口工', '同居', '啪啪', '喷水', '四虎', '夜夜', '女厕', '奶子',
          '奶罩', '好色', '婷婷', '射死', '小姐', '尹人', '巨乳', '强奷', '很鲁视', '快猫', '性交', '性爱', '性生活', '情色', '成人版', '成版人', '我爱大',
          '操逼', '无码', '日日夜夜', '最污', '杳蕉', '毛片', '波多野', '熟妇', '爱色', '特黄', '狠狠', '男朋友', '私处', '级片', '结衣', '缴情',
          '自偷', '自慰', '自拍', '自那慰', '色区', '色原', '色噜噜', '色情', '色网', '色色', '草网', '菠萝', '萝莉', '衬衫', '要色', '超碰', '轮奸',
          '青娱乐', '青青草', '韩私', '高潮', '鲁一鲁', '鲁啪', '黄片', '黄瓜', '黄短', '黄色录像', '黄色片', '黄色电影', '黄频']
    print("-----start-----")

    # city_keywords.reverse()
    for city_keyword in city_keywords:
        for releative_keyword in releative_keywords:
            keywords = releative_keyword + ' ' + city_keyword
            # add_baidu_search(keywords)
            p.apply_async(add_baidu_search, (keywords,))
    p.close()
    p.join()
    print("-----end-----")


if __name__ == '__main__':
    baidu_main()
